home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / TANK11.ZIP / SOURCE.ZIP / CONFIG.C < prev    next >
C/C++ Source or Header  |  1993-01-18  |  11KB  |  398 lines

  1. /* CONFIG.C is the main screen and config routines */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <conio.h>
  7.  
  8. #include "tankdefs.h"
  9. #include "types.h"
  10. #include "extern.h"
  11. #include "joy.h"
  12.  
  13. extern joy_stick joystick;
  14. extern int JoyStickNumber;
  15. extern int StickOnTank;
  16.  
  17. #define UPKEY    0x4800
  18. #define DOWNKEY  0x5000
  19. #define ESCKEY   0x011b
  20. #define SPACEKEY 0x3920
  21. #define RETKEY   0x1c0d
  22.  
  23. #define YBASE 11
  24. #define X 21
  25.  
  26. /* define menu order */
  27. #define BEGIN        0
  28. #define SCORES        1
  29. #define GUIDED        2
  30. #define TREES        3
  31. #define TDELAY        4
  32. #define SDELAY        5
  33. #define SRANGE        6
  34. #define NTANKS        7
  35. #define JOYTANK        8
  36. #define CALJOY        9
  37. #define SCONFIG        10
  38. #define DEFAULTS    11
  39.  
  40. void drawconfig()
  41. {
  42.     clrscr();
  43.     textattr(0x0e);
  44.     gotoxy(18,1); cprintf("╔═══════════════════════════════════════╗");
  45.     gotoxy(18,2); cprintf("║            SUPER TANK 1.1             ║");
  46.     gotoxy(18,3); cprintf("║                                       ║");
  47.     gotoxy(18,4); cprintf("║  (C) Copyright 1992 Kevin Dahlhausen  ║");
  48.    gotoxy(18,5); cprintf("║                                       ║");
  49.    gotoxy(18,6); cprintf("╚═══════════════════════════════════════╝");
  50.    textattr(0x07);
  51. }
  52.  
  53. void updatescreen()
  54. /* requires: none
  55.  * ensures:  current values of config variables are written,
  56.  *              starting at YBASE,X
  57.  */
  58. {  int x=wherex(), y=wherey();
  59.     gotoxy(X,YBASE+BEGIN);         textattr(0x07); cprintf("Begin game");
  60.  
  61.     gotoxy(X,YBASE+SCORES);        textattr(0x07); cprintf("Reset scores");
  62.  
  63.     gotoxy(X,YBASE+GUIDED);     textattr(0x0f);
  64.     if (GuidedShots) cprintf(" ON"); else cprintf("OFF");
  65.     textattr(0x07); cprintf(" Guided Bullets");
  66.  
  67.     gotoxy(X,YBASE+TREES);     textattr(0x0f);
  68.     if (TreesOn) cprintf(" ON"); else cprintf("OFF");
  69.     textattr(0x07); cprintf(" Trees Option");
  70.  
  71.     gotoxy(X,YBASE+TDELAY);
  72.     textattr(0x0f); cprintf("%03d", TankSpeed);
  73.     textattr(0x07); cprintf(" Tank Delay");
  74.  
  75.     gotoxy(X,YBASE+SDELAY);
  76.     textattr(0x0f); cprintf("%03d", ShotSpeed);
  77.     textattr(0x07); cprintf(" Bullet Delay");
  78.  
  79.     gotoxy(X,YBASE+SRANGE);
  80.     textattr(0x0f); cprintf("%03d",ShotRange);
  81.     textattr(0x07); cprintf(" Bullet Range");
  82.  
  83.     gotoxy(X,YBASE+NTANKS);
  84.     textattr(0x0f); cprintf("%03d", NumTanks);
  85.     textattr(0x07); cprintf(" Number of players");
  86.  
  87.     gotoxy(X,YBASE+JOYTANK);
  88.     textattr(0x0f);
  89.     if (StickOnTank==-1) cprintf("OFF");
  90.     else cprintf("%03d", StickOnTank+1);
  91.     textattr(0x07); cprintf(" Joystick on tank");
  92.  
  93.  
  94.     gotoxy(X,YBASE+CALJOY);
  95.     textattr(0x07); cprintf("Calibrate joystick");
  96.  
  97.     gotoxy(X, YBASE+1+SCONFIG); cprintf("Save configuration");
  98.     gotoxy(X, YBASE+1+DEFAULTS); cprintf("Restore default values");
  99.  
  100.     gotoxy(x,y); /* restore original cursor position */
  101. }
  102.  
  103. void saveconfig()
  104. /* requires: none
  105.  * ensures: config is saved to CONFIGFILE
  106.  */
  107. { FILE *cfile;
  108.   if (cfile=fopen(CONFIGFILE, "wt")) {
  109.      fprintf(cfile, "trees=%d\n", TreesOn);
  110.      fprintf(cfile, "guided=%d\n", GuidedShots);
  111.      fprintf(cfile, "tankspeed=%d\n", TankSpeed);
  112.      fprintf(cfile, "shotspeed=%d\n", ShotSpeed);
  113.      fprintf(cfile, "shotrange=%d\n", ShotRange);
  114.      fprintf(cfile, "numtanks=%d\n",  NumTanks);
  115.      fprintf(cfile, "stickon=%d\n", StickOnTank);
  116.      fprintf(cfile, "sticknumber=%d\n", JoyStickNumber);
  117.      fprintf(cfile, "cenx=%d\n", joystick.cenx);
  118.      fprintf(cfile, "ceny=%d\n", joystick.ceny);
  119.      fprintf(cfile, "tu=%d\n", joystick.tu);
  120.      fprintf(cfile, "td=%d\n", joystick.td);
  121.      fprintf(cfile, "tl=%d\n", joystick.tl);
  122.      fprintf(cfile, "tr=%d\n", joystick.tr);
  123.      fclose(cfile);
  124.  }
  125. }
  126.  
  127.  
  128. void CalibrateStick()
  129. /* requires: none
  130.  * ensures:  joystick initialized
  131.  */
  132. {
  133.     clrscr();
  134.     drawconfig();
  135.     printf("\n\n\n\n");
  136.     /* joystick routines */
  137.     JoyStickNumber=choose_stick();
  138.     set_thresh(JoyStickNumber, &joystick);
  139.     clrscr();
  140.     drawconfig();
  141. }
  142.  
  143. int configmenu()
  144. /* handles the config options in opening screen */
  145. {
  146.  int state=0;
  147.  int keyp, i;
  148.  int cpos;
  149.  int returnstate;
  150.  int *valptr;
  151.  
  152.  CursorOff;
  153.  drawconfig();
  154.  while(1) {
  155.     updatescreen();
  156.     switch (state) {
  157.         case BEGIN:  gotoxy(X-3,YBASE+BEGIN); printf("->");
  158.                     switch(bioskey(0)) {
  159.                     case RETKEY:
  160.                     case SPACEKEY:    if ((StickOnTank>-1)&&(JoyStickNumber==-1)) {
  161.                                          CalibrateStick();
  162.                                     }
  163.                                     return (1);  /* begin game */
  164.                     case ESCKEY:    return (0);  /* decided not to play */
  165.                        case UPKEY:    state=DEFAULTS; break;
  166.                     case DOWNKEY:    state++; break;
  167.                   };
  168.                   gotoxy(X-3, YBASE+BEGIN); printf("  ");
  169.                   break;
  170.  
  171.         case SCORES:  gotoxy(X-3,YBASE+SCORES); printf("->");
  172.                 switch(bioskey(0)) {
  173.                     case ESCKEY:    return (0);  /* decided not to play */
  174.                     case UPKEY:        state--; break;
  175.                     case DOWNKEY:    state++; break;
  176.                     case RETKEY:
  177.                     case SPACEKEY: for(i=0; i<MAXNUMTANKS; i++) tank[i].score=0;
  178.                  };
  179.                  gotoxy(X-3, YBASE+SCORES); printf("  ");
  180.                  break;
  181.  
  182.  
  183.         case GUIDED:  gotoxy(X-3,YBASE+GUIDED); printf("->");
  184.                     switch(bioskey(0)) {
  185.                     case ESCKEY:    return (0);  /* decided not to play */
  186.                     case UPKEY:        state--; break;
  187.                     case DOWNKEY:    state++; break;
  188.                     case RETKEY:
  189.                     case SPACEKEY: GuidedShots = !GuidedShots;
  190.                   };
  191.                   gotoxy(X-3, YBASE+GUIDED); printf("  ");
  192.                   break;
  193.  
  194.  
  195.         case TREES:  gotoxy(X-3,YBASE+TREES); printf("->");
  196.                     switch(bioskey(0)) {
  197.                     case ESCKEY:    return (0);  /* decided not to play */
  198.                     case UPKEY:        state--; break;
  199.                     case DOWNKEY:    state++; break;
  200.                     case RETKEY:
  201.                     case SPACEKEY: TreesOn = !TreesOn;
  202.                   };
  203.                   gotoxy(X-3, YBASE+TREES); printf("  ");
  204.                   break;
  205.  
  206.         case TDELAY: gotoxy(X-3,YBASE+TDELAY); printf("->");
  207.                   switch(keyp=bioskey(0)) {
  208.                      case ESCKEY:     return (0);  /* decided not to play */
  209.                      case UPKEY:     state--; break;
  210.                      case DOWNKEY:     state++; break;
  211.                      default:       keyp=(keyp&0x00ff)-0x30;  /* check for # key */
  212.                                          if ((keyp>=0)&&(keyp<=9)) {
  213.                                             returnstate=TDELAY;
  214.                                             valptr=&TankSpeed;
  215.                                             state=101;
  216.                                             gotoxy(X, YBASE+TDELAY);
  217.                                             CursorOn;
  218.                                          }
  219.                   };
  220.                   gotoxy(X-3, YBASE+TDELAY); printf("  ");
  221.                   break;
  222.  
  223.         case SDELAY: gotoxy(X-3,YBASE+SDELAY); printf("->");
  224.                   switch(keyp=bioskey(0)) {
  225.                      case ESCKEY:     return (0);  /* decided not to play */
  226.                      case UPKEY:     state--; break;
  227.                      case DOWNKEY:     state++; break;
  228.                      default:       keyp=(keyp&0x00ff)-0x30;  /* check for # key */
  229.                                          if ((keyp>=0)&&(keyp<=9)) {
  230.                                             returnstate=SDELAY;
  231.                                             valptr=&ShotSpeed;
  232.                                             state=101;
  233.                                             gotoxy(X, YBASE+SDELAY);
  234.                                             CursorOn;
  235.                                          }
  236.                   };
  237.                   gotoxy(X-3, YBASE+SDELAY); printf("  ");
  238.                   break;
  239.  
  240.         case SRANGE: gotoxy(X-3,YBASE+SRANGE); printf("->");
  241.                   switch(keyp=bioskey(0)) {
  242.                      case ESCKEY:     return (0);  /* decided not to play */
  243.                      case UPKEY:     state--; break;
  244.                      case DOWNKEY:     state++; break;
  245.                      default:       keyp=(keyp&0x00ff)-0x30;  /* check for # key */
  246.                                          if ((keyp>=0)&&(keyp<=9)) {
  247.                                             returnstate=SRANGE;
  248.                                             valptr=&ShotRange;
  249.                                             state=101;
  250.                                             gotoxy(X, YBASE+SRANGE);
  251.                                             CursorOn;
  252.                                          }
  253.                   };
  254.                   gotoxy(X-3, YBASE+SRANGE); printf("  ");
  255.                   break;
  256.  
  257.         case NTANKS:    gotoxy(X-3, YBASE+NTANKS); printf("->");
  258.                     switch(keyp=bioskey(0)) {
  259.                         case ESCKEY:    return(0);
  260.                         case UPKEY:        state--; break;
  261.                         case DOWNKEY:    state++; break;
  262.                         case 0x0332:            NumTanks=2;
  263.                                             for (i=0; i<NumTanks; i++) tank[i].score=0;
  264.                                             break;
  265.                         case 0x0433:            NumTanks=3;
  266.                                             for (i=0; i<NumTanks; i++) tank[i].score=0;
  267.                                             break;
  268.                         case SPACEKEY:
  269.                         case RETKEY:    NumTanks=((NumTanks-1)%(MAXNUMTANKS-1))+2;
  270.                                             for (i=0; i<NumTanks; i++) tank[i].score=0;
  271.  
  272.                   }
  273.  
  274.                   gotoxy(X-3, YBASE+NTANKS); printf("  ");
  275.                   break;
  276.  
  277.         case JOYTANK: gotoxy(X-3, YBASE+JOYTANK); printf("->");
  278.                     switch(bioskey(0)) {
  279.                         case ESCKEY:    return(0);
  280.                         case UPKEY:        state--; break;
  281.                         case DOWNKEY:    state++; break;
  282.                         case RETKEY:
  283.                         case SPACEKEY:   StickOnTank++;
  284.                                          if (StickOnTank==MAXNUMTANKS) StickOnTank=-1;
  285.                                           break;
  286.                     }
  287.                     gotoxy(X-3, YBASE+JOYTANK); printf("  ");
  288.                     break;
  289.  
  290.         case CALJOY: gotoxy(X-3, YBASE+CALJOY); printf("->");
  291.                     switch(bioskey(0)) {
  292.                         case ESCKEY:    return(0);
  293.                         case UPKEY:        state--; break;
  294.                         case DOWNKEY:    state++; break;
  295.                         case RETKEY:
  296.                         case SPACEKEY:  CalibrateStick();
  297.                                         break;
  298.  
  299.                     }
  300.                     gotoxy(X-3, YBASE+CALJOY); printf("  ");
  301.                     break;
  302.  
  303.  
  304.         case SCONFIG:  gotoxy(X-3, YBASE+SCONFIG+1); printf("->");
  305.                     switch(bioskey(0)) {
  306.                         case ESCKEY:    return(0);
  307.                         case UPKEY:        state--; break;
  308.                         case DOWNKEY:    state++; break;
  309.                         case RETKEY:
  310.                         case SPACEKEY:   saveconfig(); break;
  311.                     }
  312.                     gotoxy(X-3, YBASE+SCONFIG+1); printf("  ");
  313.                     break;
  314.  
  315.         case DEFAULTS:    gotoxy(X-3,YBASE+DEFAULTS+1); printf("->");
  316.                     switch(bioskey(0)) {
  317.                         case ESCKEY:    return(0);
  318.                         case UPKEY:        state--; break;
  319.                   case DOWNKEY:  state=0; break;
  320.                         case RETKEY:
  321.                         case SPACEKEY:    GuidedShots=0;
  322.                                             TreesOn=0;
  323.                                             TankSpeed=DEFTANKSPEED;
  324.                                             ShotSpeed=DEFSHOTSPEED;
  325.                                             ShotRange=DEFSHOTRANGE;
  326.                                             NumTanks=DEFNUMTANKS;
  327.                                             break;
  328.                     }
  329.                     gotoxy(X-3, YBASE+DEFAULTS+1); printf("  ");
  330.                     break;
  331.  
  332.         case 101: /* keyp contains 0-9 */
  333.                           *valptr=keyp*100;
  334.                         state=102;
  335.                         gotoxy(wherex()+2, wherey());
  336.                         break;
  337.  
  338.         case 102: /* 2nd digit */
  339.                        keyp=(bioskey(0)&0x00ff)-0x30;
  340.                        if ((keyp>=0)&&(keyp<=9)) {
  341.                            *valptr += (keyp*10);
  342.                            state=103;
  343.                            gotoxy(wherex()+1, wherey());
  344.                        }
  345.                        break;
  346.  
  347.         case 103: /* 3rd digit */
  348.                      keyp=(bioskey(0)&0x00ff)-0x30;
  349.                      if ((keyp>=0)&&(keyp<=9)) {
  350.                          *valptr += keyp;
  351.                          state=returnstate;
  352.                          CursorOff;
  353.                      }
  354.                      break;
  355.  
  356.     } /* main switch */
  357.  } /* while(1) */
  358. }
  359.  
  360. void readconfig()
  361. /* requires: none
  362.  * ensures:  config is read from data file
  363.  */
  364. {
  365.     FILE *cfile;
  366.     char nextline[81];
  367.     char string[81];
  368.     int  newval;
  369.     int eqpos;
  370.  
  371.  /* parse config file */
  372.  if (cfile=fopen(CONFIGFILE,"rt")) {
  373.     while (fgets(nextline, 80, cfile)!=NULL) {
  374.         if (eqpos=strcspn(nextline,"=")) {
  375.             strncpy(string, nextline, eqpos);  /* contains the arguement */
  376.             string[eqpos]='\0';
  377.             strlwr(string);
  378.             newval=atoi(nextline+eqpos+1);
  379.             if (strcmp(string,"trees")==0)            TreesOn=newval;
  380.             else if (strcmp(string,"guided")==0)     GuidedShots=newval;
  381.             else if (strcmp(string,"shotrange")==0) ShotRange=newval;
  382.             else if (strcmp(string,"shotspeed")==0) ShotSpeed=newval;
  383.             else if (strcmp(string,"tankspeed")==0) TankSpeed=newval;
  384.             else if (strcmp(string,"numtanks")==0)  NumTanks=newval;
  385.             else if (strcmp(string,"cenx")==0) joystick.cenx=newval;
  386.             else if (strcmp(string,"ceny")==0) joystick.ceny=newval;
  387.             else if (strcmp(string,"tu")==0) joystick.tu=newval;
  388.             else if (strcmp(string,"td")==0) joystick.td=newval;
  389.             else if (strcmp(string,"tl")==0) joystick.tl=newval;
  390.             else if (strcmp(string,"tr")==0) joystick.tr=newval;
  391.             else if (strcmp(string,"stickon")==0) StickOnTank=newval;
  392.             else if (strcmp(string,"sticknumber")==0) JoyStickNumber=newval;
  393.         }
  394.     }
  395.     fclose(cfile);
  396.     }
  397.  }
  398.